package pox.sheet;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import pox.channel.SharedStringChannel;
import pox.util.NumUtil;

public class Row {
	long index;
	long minIndex = 1;
	long maxIndex = 1;
	Map<Integer, Long> cellmap = new HashMap<>();
	FileOutputStream sheetFile;

	/**
	 * 创建一行
	 * 
	 * @param index
	 *            第几行
	 * @param sheetFile
	 *            sheet文件流
	 */
	Row(long index, FileOutputStream sheetFile) {
		this.index = index;
		this.sheetFile = sheetFile;

	}

	/**
	 * 创建单元格
	 * 
	 * @param columnIndex
	 *            单元格位置
	 * @param value
	 *            单元格值
	 */
	public void createCell(int columnIndex, String value) {
		Integer index = new Integer(columnIndex);
		// 记录单元格所在区间
		if (columnIndex < minIndex) {
			minIndex = columnIndex;
		}
		if (columnIndex > maxIndex) {
			maxIndex = columnIndex;
		}
		cellmap.put(index, SharedStringChannel.addSharedString(value));
	}

	/**
	 * 保存数据到文件
	 * 
	 * @throws IOException
	 */
	public void save() throws IOException {
		sheetFile.write(toRowString().getBytes());
	}

	/**
	 * 将当前行转换为字符串
	 * 
	 * @return
	 */
	public String toRowString() {
		StringBuilder builder = new StringBuilder();
		// <row r="6" spans="1:6"></row>
		// <c r="D17" t="s"><v>5</v></c>
		Set<Entry<Integer, Long>> entrySet = cellmap.entrySet();
		// 头部拼接
		builder.append("<row r=\"").append(index).append("\" spans=\"").append(minIndex).append(":").append(maxIndex)
				.append("\">");
		// 拼接单元格内容
		for (Entry<Integer, Long> entry : entrySet) {
			builder.append("<c r=\"").append(NumUtil.num2capital(entry.getKey())).append(index).append("\" t=\"s\"><v>")
					.append(entry.getValue()).append("</v></c>");
		}
		builder.append("</row>");
		return builder.toString();
	}

	@Override
	public String toString() {
		return toRowString();
	}

}
